1. Technical Field
This invention generally relates to computer programs and more specifically relates to a mechanism and method for allowing a user to undo and redo more that one task in a computer program by using features provided on a graphical user interface.
2. Background Art
The development of the EDVAC computer system of 1948 is often cited as the beginning of the computer era. Since that time, computer systems have evolved into extremely sophisticated devices that may be found in many different settings. Computer systems typically include a combination of hardware (e.g., semiconductors, circuit boards, etc.) and software (e.g., computer programs). As advances in semiconductor processing and computer architecture push the performance of the computer hardware higher, more sophisticated computer software has evolved to take advantage of the higher performance of the hardware, resulting in computer systems today that are much more powerful than just a few years ago.
Early computer systems used command-based operating systems and software applications. These command-based systems provided a user interface that required the user to memorize a relatively large number of commands in order to perform meaningful work. The user interfaces for these command-driven computer programs required a relatively high level of skill to operate, and were not considered to be "user-friendly." With the introduction of the IBM personal computer (PC), computers became more widely available, both in the workplace and in homes, and the computer industry soon recognized the need to provide more user-friendly interfaces to computer programs. As a result, many different operating systems were introduced that provided a graphical user interface (GUI), including IBM's OS/2, Microsoft Windows, and the Apple McIntosh. Software applications with graphical user interfaces soon followed, and the vast majority of computer programs running on personal computers today provides a user-friendly graphical user interface.
Most graphical user interfaces provide many similar features. The basic display area in a graphical user interface is known as a window. A single window may fill the entire display, or the display can be split into a number of different windows. Most graphical user interfaces provide a menu bar that provides several drop-down lists of commands the user can perform. Various toolbars may also be provided that are customized to performing certain tasks within the computer program. A pointing device such as a trackball or a mouse is generally used to select various commands and options by clicking on the appropriate buttons on the menu bar, tool bar, or by selecting particular portions of a window.
Many computer programs have tasks or commands that may be performed by either clicking on the appropriate button on a menu or toolbar, or by using certain keystrokes on the computer keyboard. One good reason to provide the dual functionality of menu commands and keystrokes is to maintain compatibility between previous command-driven computer programs and their newer graphical versions. A user that is proficient in the keystroke commands can thus operate a new version of the software that has a graphical user interface by resorting to his tried and true techniques that worked in the command-driven software, and can thus be immediately productive while exploring the additional functionality provided by the graphical user interface as time allows.
Another good reason to provide keystroke equivalents for menu items and toolbar buttons is to provide shortcuts to frequently-executed commands. Many menu bars now have multiple sub-menus, and getting to a command that is nested two or three levels deep in menus with a pointing device can be time-consuming. It is sometimes faster to simply click on the equivalent keystrokes rather than navigating the graphical user interface.
One common feature that is provided in the graphical user interface of many computer programs is the capability to "undo" a task that was just performed. The "undo" command may be a command on a drop-down menu bar, a button on a tool bar, a page link, a dialog box, or may be performed using key-strokes similar to the command-driven interfaces of old. Of course, other mechanisms not disclosed herein are known in the art for undoing tasks at the request of a user. For the sake of convenience herein, the step of invoking an undo command in a computer program is referred to as undoing a task, recognizing that there exist various methods for invoking an undo command. Any and all suitable methods of invoking an undo command in a computer program fall within the scope of undoing a task as described herein. Similarly, the step of invoking a redo command in a computer program is referred to herein as redoing a task for the sake of illustrating the concepts of the present invention.
Some computer programs include the ability to undo several tasks one by one by repeatedly clicking on the undo button, which causes the application to undo each command one by one in reverse succession. Most graphical user interfaces that include an undo command also include a redo command that allows a user to redo the last command that was just undone. In this manner a user can click on the undo button repeatedly until she has backed up to a suitable point, and can then click on the redo button if she has backed up too far, or if she decides to redo the task just undone.
One problem with known undo/redo mechanisms is that the user must undo or redo one task at a time until a suitable stopping point is visually determined by the user observing the effect of undoing or redoing each task on the display. If a user realizes that she has performed thirty or so commands since a particular point in time, and she needs to undo those thirty or so commands, she must click the "undo" button thirty or more times in succession, watching as the previous thirty changes are undone one by one in reverse order. This can be excruciatingly slow if the computer program requires the screen to refresh to reflect the effect of each undo. Similarly, if the user undoes thirty commands and realizes that the last fifteen were needed, she must then click on the redo button fifteen times to get the computer program back to the desired state. Another problem with the current single-step undo/redo mechanisms known in the art is that some tasks that are performed are not easily visually detected on the user's screen. For example, if the user formats a wordprocessing document to include a particular header on each page, but the display mode does not show the page headers, it will not be visually apparent to the user what this task does by simply observing the display as the task is undone or redone. For these reasons, the process of single-stepping through undo and redo levels can become annoying for a user.
In many computer programs, the user can only undo one task, and can only redo the one task that was just undone. Other computer programs allow multiple undo/redo, but only to a few levels deep, such as five levels of undo/redo. If a user needs to undo ten tasks in a computer program that only defines five levels of undo/redo, the user cannot return to the desired state. Also, there is no mechanism known in the art that allows a user to retrieve her work from a specific point in time without saving multiple versions of the same document. These constraints in the prior art restrict a user's ability to explore and perform trial-and-error in using a computer program. Without a mechanism that allows a user to perform multiple levels of undo and redo at a time, the computer industry will continue to suffer from graphical user interfaces that are inconvenient and frustrating to use.